package com.huluobo.a2212mdmdemo.demo

import android.animation.ValueAnimator
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.RectF
import android.util.Log
import android.view.View
import android.view.animation.LinearInterpolator
import kotlinx.coroutines.runBlocking

/**
 *  Created by LC on 2025/6/9.
 *  1.1个参数的构造方法,一般用于在代码中创建一个View,比如在布局上展示一个礼物的View,这种创建形式必须要添加LayoutParams来给View宽高
 *  2.2个参数的构造方法,一般用于在xml上写出一个View,attributeSet 就是他的属性集合,一般默认就是宽高
 *  3个参数的和四个参数的不常用,一般添加的都是Style文件和资源,应用主题的时候使用
 */

class MyView(context: Context) : View(context) {
    //测量 matchParent,warpContent,20dp
    //widthMeasureSpec 包含了2个值,第一个是mode,第二个是size,mode中分别有实际的值,和最大值(AtMost)2种形式
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }

    //摆放一个View的位置,一般单独的View不会使用这个方法,只有在ViewGroup中才会使用
    //  l t r b 分别代表距离左侧和顶点的距离
    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
        super.onLayout(changed, left, top, right, bottom)
    }

    //画笔
    private lateinit var paint: Paint
    private lateinit var paintText: Paint

    //倒计时的秒
    private var num = 5

    //绘制的角度
    private var progress = 0f

    init {
        initPaint()
        start()
    }

    private fun initPaint() {
        paint = Paint()
        //注意,导入的是android包下的Color,不要使用compose下的color,不是一个东西
        paint.color = Color.RED
        //设置绘制线的风格,有3种风格,分别为线,填充,钱+填充
        paint.style = Paint.Style.STROKE
        //设置绘制线的宽度
        paint.strokeWidth = 5f
        paintText = Paint()
        paintText.color = Color.BLUE
        paintText.textSize = 100f
    }


    //绘制  Canvas 画布 paint 画笔 比如view是一个圆,或者是一段文字
    //参数总的100并不是dp,而是px  在1920*1080分辨率中 1dp大概等于2.5px
    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        //声明一个矩形范围
        val rectF = RectF(100f, 100f, 600f, 600f)
        //通过canvas绘制一个矩形
//        canvas.drawRect(rectF, paint)
        canvas.drawArc(rectF, 270f, progress, false, paint)
        canvas.drawText(num.toString(), 320f, 380f, paintText)
    }

    fun start() {
        //协程的newThread
        runBlocking {
            val animator = ValueAnimator.ofFloat(0f, 360f)
            //设置属性动画监听器
            animator.addUpdateListener {
                progress = it.animatedValue as Float
                //刷新view自身,绘制自身
                invalidate()
            }
            //插值器,改变的是动画的运行速率,默认情况是加速减速插值器,会在动画运行开始加速,结束之前减速
            animator.interpolator = LinearInterpolator()
            //设置动画时长
            animator.duration = 5000
            animator.start()
        }

        runBlocking {
            val animatorText = ValueAnimator.ofInt(num, 0)
            animatorText.duration = 5000
            animatorText.addUpdateListener {
                num = it.animatedValue as Int
                invalidate()
            }
            animatorText.interpolator = LinearInterpolator()
            animatorText.start()
        }
    }
}